home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / Caml Light 0.61 / Source / src / runtime / signals.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-09-24  |  760 b   |  45 lines  |  [TEXT/MPS ]

  1. #include "mlvalues.h"
  2. #include "signals.h"
  3. #include "alloc.h"
  4. #include "stacks.h"
  5.  
  6. #ifdef ANSI
  7.  
  8. volatile int signal_is_pending = 0;
  9. int in_blocking_section = 0;
  10. volatile code_t signal_handler;
  11. volatile int signal_number;
  12.  
  13. #else
  14.  
  15. int signal_is_pending = 0;
  16. int in_blocking_section = 0;
  17. code_t signal_handler;
  18. int signal_number;
  19.  
  20. #endif
  21.  
  22. void execute_signal()
  23. {
  24.   if (in_blocking_section) {
  25.     value clos;
  26.     clos = alloc(2, Closure_tag);
  27.     Code_val(clos) = signal_handler;
  28.     Env_val(clos) = Atom(0);
  29.     callback(clos, Val_int(signal_number));
  30.   } else {
  31.     signal_is_pending = 1;
  32.   }
  33. }
  34.  
  35. void enter_blocking_section()
  36. {
  37.   in_blocking_section = 1;
  38.   if (signal_is_pending) execute_signal();
  39. }
  40.  
  41. void leave_blocking_section()
  42. {
  43.   in_blocking_section = 0;
  44. }
  45.